home *** CD-ROM | disk | FTP | other *** search
- ; EXAMPLE ASSEMBLY PROGRAM
- ; MacTutor Ad
- ; VERSION 22 JAN 85
- ; (C) 1985 MacTutor by David E. Smith
-
- ; Macro subset for Toolbox stuff
-
- MACRO _InitGraf = DC.W $A86E|
- MACRO _InitWind = DC.W $A912|
- MACRO _NewWindow = DC.W $A913|
- MACRO _setport = DC.W $A873|
- MACRO _InitFont = DC.W $A8FE|
- MACRO _InitMenu = DC.W $A930|
- MACRO _InitDialog = DC.W $A97B|
- MACRO _TEInit = DC.W $A9CC|
- MACRO _Initpack = DC.W $A9E5|
- MACRO _FlushEvents = DC.W $A032|
- MACRO _InitCursor = DC.W $A850|
- MACRO _GetNextEvent = DC.W $A970|
- MACRO _FrameRect = DC.W $A8A1|
- MACRO _TextFont = DC.W $A887|
- MACRO _TextFace = DC.W $A888|
- MACRO _TextSize = DC.W $A88A|
- MACRO _MoveTo = DC.W $A893|
- MACRO _DrawString = DC.W $A884|
- MACRO _PenSize = DC.W $A89B|
- MACRO _EraseRect = DC.W $A8A3|
- MACRO _GetRMenu = DC.W $A9BF|
- MACRO _InsertMenu = DC.W $A935|
- MACRO _DrawMenuBar = DC.W $A937|
- MACRO _Debugger = DC.W $A9FF|
- MACRO _NewMenu = DC.W $A931|
- MACRO _AppendMenu = DC.W $A933|
- MACRO _AddResMenu = DC.W $A94D|
- MACRO _FindWindow = DC.W $A92C|
- MACRO _DragWindow = DC.W $A925|
- MACRO _SystemTask = DC.W $A9B4|
- MACRO _MenuSelect = DC.W $A93D|
- MACRO _HiLiteMenu = DC.W $A938|
- MACRO _EnableItem = DC.W $A939|
- MACRO _DisableItem = DC.W $A93A|
- MACRO _BeginUpdate = DC.W $A922|
- MACRO _EndUpdate = DC.W $A923|
- MACRO _SystemClick = DC.W $A9B3|
- MACRO _FrontWindow = DC.W $A924|
- MACRO _SelectWindow = DC.W $A91F|
- MACRO _GetItem = DC.W $A946|
- MACRO _OpenDeskAcc = DC.W $A9B6|
- MACRO _TrackGoAway = DC.W $A91E|
- MACRO _HideWindow = DC.W $A916|
- MACRO _PenNormal = DC.W $A89E|
- MACRO _ShowWindow = DC.W $A915|
- MACRO _TENew = DC.W $A9D2|
- MACRO _TECut = DC.W $A9D6|
- MACRO _TECopy = DC.W $A9D5|
- MACRO _TEPaste = DC.W $A9DB|
- MACRO _TEDelete = DC.W $A9D7|
- MACRO _TEActivate = DC.W $A9D8|
- MACRO _TEDeactivate = DC.W $A9D9|
- MACRO _SysEdit = DC.W $A9C2|
- MACRO _NewDialog = DC.W $A97D|
- MACRO _GetResource = DC.W $A9A0|
- MACRO _IsDialogevent = DC.W $A97F|
- MACRO _Dialogselect = DC.W $A980|
- MACRO _CloseWindow = DC.W $A92D|
-
- ; DECLARE LABELS EXTERNAL
-
- XDEF START ; required for linker
-
- ; LOCAL EQUATES
-
- MouseDown equ 1
- MaxEvents equ 12
- AllEvents equ $0000FFFF
- TEXTRHANDLE equ A2
-
- ; MAIN PROGRAM SEGMENT
-
- DC.W 'DAVE' ;find start of program
-
- ; --- SAVE THE WORLD ------------
-
- START: MOVEM.L D0-D7/A0-A6, -(SP)
- LEA SAVEREGS,A0
- MOVE.L A6,(A0) ; local var
- MOVE.L A7,4(A0) ; stack ptr
-
- ; ---INITIALIZE ALL MANAGERS--------
-
- ; SET UP QUICKDRAW GLOBALS
-
- PEA -4(A5) ;push qd global ptr
- _InitGraf ;init quickdraw global
-
- ;---- SET UP REMAINING MANAGERS ---
-
- _InitFont ; init font manager
- _InitWind ; init window manager
- _InitMenu ; init menu manager
-
- CLR.L -(SP) ; kill the restart
- _InitDialog ; init dialog manager
-
- _TEInit ; init text edit (ROM)
-
- MOVE.W #2,-(SP) ; set-up
- _Initpack ; init package mgr
-
- MOVE.L #AllEvents,D0 ;all events
- _FlushEvents ;flushed
-
- _InitCursor ; make cursor the arrow
-
-
- ; -- SET UP MENU BAR WITH POP-UP MENUS
-
- CLR.L -(SP) ;returned menu handle
- MOVE.W #1,-(SP) ;push menu ID 1 Apple
- _GetRMenu ;get menu from resource
- LEA APPLEMENU,A0 ; copy apple menu handle
- MOVE.L (SP),(A0) ; to local data block
- MOVE.L (SP), -(SP) ;push menu handle for desk acc.
- ;menu handle still on stack
- CLR.W -(SP) ;push 0 for append
- _InsertMenu ;add menu item for About...
-
- MOVE.L #'DRVR', -(SP) ;load all DRVR type resources
- _AddResMenu ;add desk accessories
- ;from system file.
- CLR.L -(SP) ;return menu handle
- MOVE.W #2,-(SP) ;push menu ID 2 File
- _GetRMenu ;get menu from resource
- LEA FILEMENU,A0 ; copy FILE menu handle
- MOVE.L (SP),(A0) ; to local data block
- ;leave handle on stack
- CLR.W -(SP) ;append to menu
- _InsertMenu ;the File stuff
-
- CLR.L -(SP) ;return menu handle
- MOVE.W #3,-(SP) ;push menu ID 3 Edit
- _GetRMenu ;get menu from resource
- ;leave handle on stack
- LEA EDITMENU,A0 ; copy EDIT menu handle
- MOVE.L (SP),(A0) ; to local data block
- CLR.W -(SP) ;append to menu
- _InsertMenu ;the File stuff
-
- _DrawMenuBar ;our menu bar!
-
- ;-- SET UP NEW HEAP WINDOW ----
-
- CLR.L -(SP) ;return window ptr
- CLR.L -(SP) ;window record ptr. (HEAP)
- PEA WBOUNDS ;window rectangle size
- PEA WINDTITLE ; window title
- MOVE.W #$100,-(SP) ; true = visible
- MOVE.W #0,-(SP) ; doc type window
- MOVE.L #-1,-(SP) ; window in front
- MOVE.W #$100,-(SP) ; true=closebox
- MOVE.L #0, -(SP) ; reference value
- _NewWindow ; make new window
-
- ; -- ACTIVATE THIS NEW WINDOW ------
-
- LEA WPOINTER,A0 ; copy our window ptr
- MOVE.L (SP),(A0) ; to stacksave
- ; ptr still on stack.
- _setport ; set to current window
-
- ; --- SET UP TEXT EDIT ABILITY -------
-
- CLR.L -(SP) ;text handle returned
- PEA DestRect ;destination for text
- PEA ViewRect ;viewing of text
- _TENew ;new text record on heap
- MOVE.L (SP)+,TEXTRHANDLE;pop handle
-
- ; ---- INITALIZE VARIABLES --------
-
- JSR INITVAR ;INITIALIZE DS STORAGE
-
- ; --------- EVENT LOOP ------------
-
- GetEvent:
-
- _SystemTask ;check out desk acc
-
- CLR -(SP) ;returned event
- MOVE #AllEvents,-(SP) ;mask all events
- PEA EventRecord ; event record block
- _GetNextEvent ;go check the mouse
- MOVE (SP)+,D0 ;get event result
- CMP #0,D0 ;if 0 then no event
- BEQ GetEvent ;loop until it happens
-
- ; check for dialog event
-
- CLR -(SP) ;result
- PEA EventRecord ;push event
- _IsDialogevent ;was it a dialog event?
- MOVE (SP)+,D0 ;get result
- CMP #0,D0 ;is it false?
- BEQ Processevent ;yes, not dialog
- ;no, was dialog event
-
- CLR -(SP) ;result
- PEA EventRecord ;event
- PEA ABOUTHANDLE ;dialog handle
- PEA ITEMHIT ;item hit
- _Dialogselect
- MOVE (SP)+,D0 ;get result
- CMP #0,D0 ;is it false?
- BEQ GetEvent ;yes
- ; note: always false since no
- ; controls enabled. closebox is
- ; returned false.
- _Debugger ;do we ever get here?
- JMP GetEvent
-
- Processevent:
-
- ; JUMP TABLE OF EVENT PROCESSING
-
- CLR.L D0
- MOVE What,D0 ;what to do! (event number)
- CMP #MaxEvents,D0 ;event no. >11?
- BGE GetEvent ;yes so ignore it
- ADD D0,D0 ;multiply by 2
- MOVE EventTable(D0),D0
- JMP EventTable(D0) ;execute event
-
- EventTable:
-
- DC.W GetEvent-EventTable ;null event #0
- DC.W ButtonDown-EventTable ;mouse down event #1
- DC.W GetEvent-EventTable ;mouse up #2
- DC.W GetEvent-EventTable ;key down event #3
- DC.W GetEvent-EventTable ;key up event #4
- DC.W GetEvent-EventTable ;auto key #5
- DC.W Update-EventTable ;update event #6
- DC.W GetEvent-EventTable ;Disk Event #7
- DC.W Activate-EventTable ;activate event #8
- DC.W GetEvent-EventTable ;Abort #9
- DC.W GetEvent-EventTable ;Network #10
- DC.W GetEvent-EventTable ;I/O Driver #11
- DC.W GetEvent-EventTable ;Appl. event 1 #12
- DC.W GetEvent-EventTable ;Appl. event 2 #13
- DC.W GetEvent-EventTable ;Appl. event 3 #14
- DC.W GetEvent-EventTable ;Appl. event 4 #15
-
- ; note that linker error may result if
- ; the table entry is >128
-
- ; -------- EVENT PROCESSING ROUTINES --------
-
- Activate:
-
- ; window needs attention
-
- MOVE.L WPOINTER,A0 ;copy window ptr.
- CMP.L Message,A0 ;Event our window?
- BNE GetEvent ;no
-
- MOVE.W Modify,D0 ;yes, check modify flags
- BTST #0,D0 ;check activate bit
- BEQ Deactivate ;unactivate our window
-
- ; activate our window
-
- MOVE.L TEXTRHANDLE,-(SP)
- _TEActivate ;activate text edit
-
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #1,-(SP) ;push menu item 1
- _DisableItem ;disable undo
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #3,-(SP) ;push menu item
- _DisableItem ;disable cut
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #4,-(SP) ;push menu item
- _DisableItem ;disable copy
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #5,-(SP) ;push menu item
- _DisableItem ;disable paste
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #6,-(SP) ;push menu item
- _DisableItem ;disable clear
-
- MOVE.L WPOINTER,-(SP) ;push window ptr
- _SetPort ;make our port active
- JMP GetEvent
-
- Deactivate:
-
- MOVE.L TEXTRHANDLE,-(SP)
- _TEDeactivate ;turn off text edit
- ;let desk acc. use it
- MOVE.L EDITMENU,-(SP)
- MOVE.W #1,-(SP)
- _EnableItem ;enable undo for desk acc.
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #3,-(SP) ;push menu item
- _EnableItem ;able cut
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #4,-(SP) ;push menu item
- _EnableItem ;enable copy
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #5,-(SP) ;push menu item
- _EnableItem ;enable paste
- MOVE.L EDITMENU,-(SP) ;push menu handle
- MOVE.W #6,-(SP) ;push menu item
- _EnableItem ;enable clear
- JMP GetEvent
-
-
- Update:
-
- ; window needs refreshing
-
- MOVE.L WPOINTER,-(SP) ;push window ptr
- _BeginUpdate
- MOVE.L WPOINTER,-(SP) ;push our window ptr.
- _SetPort ;restore our port
- ;least an update draw in
- ;the wrong window.
- BSR QDSTUFF ;re-draw everything
- MOVE.L WPOINTER,-(SP)
- _EndUpdate
- JMP GetEvent
-
-
- ButtonDown:
-
- CLR -(SP) ;result of findwindow
- MOVE.L Point, -(SP) ;push mouse coordinates
- PEA WWindow ;push holder for window handle
- _FindWindow ;where was mouse click?
- CLR.L D0
- MOVE (SP)+,D0 ;pop region number
- ADD D0,D0 ;multiply by 2
- MOVE WindowTable(D0),D0
- JMP WindowTable(D0) ;do mouse down event
-
- WindowTable: ;table of mouse button down events
-
- DC.W GetEvent-WindowTable ;in desk (none of following)
- DC.W Menubar-WindowTable ;in menu bar
- DC.W System-WindowTable ;in system window
- DC.W Content-WindowTable ;in content region
- DC.W Drag-WindowTable ;in drag region
- DC.W GetEvent-WindowTable ;in grow region (ignored)
- DC.W Hide-WindowTable ;in go-away region
-
- System:
-
- ; Button pressed in a system window
- ; _SystemClick calls the desk acc.
-
- PEA EventRecord ;push event record
- MOVE.L WWindow,-(SP) ;push find window pointer
- _SystemClick ;let system do desk acc.
- JMP GetEvent
-
- Content:
-
- MOVE.L WWindow,-(SP) ;activate find window
- _SelectWindow ;make it front window
- JMP GetEvent
-
- Drag: ;mouse button in drag window
- ;could be dialog window
- MOVE.L WWindow,-(SP) ;push find window pointer
- MOVE.L Point, -(SP) ;push mouse coordinates
- PEA DRAGWINDOW ;window boundries to drag
- _DragWindow ;move window
-
- MOVE.L WWindow,A0 ;find window ptr.
- CMP.L ABOUTHANDLE,A0 ;is it about window?
- BNE ENDDRAG ;no, exit
- JSR INITVAR ;yes, reset about window location
-
- ENDDRAG:
- JMP GetEvent ;return to event loop
-
- Hide: ;close box
- ;could be dialog window
- CLR.W -(SP) ;boolean result
- MOVE.L WWindow,-(SP) ;push find window ptr
- MOVE.L Point, -(SP) ;push mouse location
- _TrackGoAway
- MOVE.W (SP)+,D0 ;get result
- BEQ GetEvent ;false result
-
- MOVE.L WWindow,A0 ;find window ptr.
- CMP.L WPOINTER,A0 ;is it our window?
- BEQ Hideours ;yes, hide ours
-
- MOVE.L WWindow, -(SP) ;must be about window
- _CloseWindow ;close it
-
- ;note: Don't use closedialog for modeless
- ;dialog windows if more than one present.
-
- ; update about window location
-
- LEA DBOUNDS,A0 ;set-up our globals
- LEA Savetop,A1
-
- MOVE.W 0(A0),D0 ;TOP VALUE
- MOVE.W 0(A1),D1 ;origonal value
- CMP.W D1,D0 ;past init value?
- BLE GetEvent ;skip update
-
- ADDI #-20,D0 ;decrement top
- MOVE.W D0,(A0)
-
- MOVE.W 2(A0),D0 ;LEFT VALUE
- ADDI #-20,D0
- MOVE.W D0,2(A0)
-
- MOVE.W 4(A0),D0 ;BOTTOM VALUE
- ADDI #-20,D0
- MOVE.W D0,4(A0)
-
- MOVE.W 6(A0),D0 ;RIGHT VALUE
- ADDI #-20,D0
- MOVE.W D0,6(A0)
-
- JMP GetEvent
-
- Hideours:
-
- MOVE.L WPOINTER, -(SP) ;our window ptr
- _HideWindow ;hide window
- MOVE.L FILEMENU,-(SP) ;menu handle
- MOVE.W #1,-(SP) ;open item
- _EnableItem ;enable open for file menu
- MOVE.L FILEMENU,-(SP) ;push menu handle
- MOVE.W #2,-(SP) ;close
- _DisableItem ;disable it
- JMP GetEvent
-
- Menubar:
-
- CLR.L -(SP) ;returned menu choice
- MOVE.L Point,-(SP) ;mouse position
- _MenuSelect ;Find menu selected
- MOVE (SP)+,D5 ;pop menu ID to D5
- MOVE (SP)+,D6 ;pop menu item ID to D6
- CLR -(SP) ;select all menus
- _HiLiteMenu ;unhilite them all
-
- CMP #1, D5 ;apple menu?
- BEQ Inapplemenu
- CMP #2, D5 ;file menu?
- BEQ Infilemenu
- CMP #3,D5 ;edit menu?
- BEQ Ineditmenu
- BRA GetEvent ;no place else
-
- Inapplemenu:
-
- CMP #1, D6 ;is it about...?
- BEQ About
-
- ; must be a desk accessory
-
- MOVE.L APPLEMENU, -(SP) ;push apple menu handle
- MOVE.W D6,-(SP) ;push item number
- PEA DeskName ;push holder for desk name
- _GetItem ;find desk acc. name
-
- CLR -(SP) ;result
- PEA DeskName ;push desk acc. name
- _OpenDeskAcc ;do it
- MOVE (SP)+,D0 ;pop result
- MOVE.L WPOINTER,-(SP) ;push window ptr.
- _SetPort ;restore our port
- JMP GetEvent
-
- About:
-
- CLR.L -(SP) ;return handle
- MOVE.L #'DITL',-(SP) ;item list
- MOVE.W #256,-(SP) ;ID
- _GetResource ;load item list resource
- LEA DIALOGITEMS,A0 ;handle storage
- MOVE.L (SP)+,(A0) ;save handle
-
- ; update window location
-
- LEA DBOUNDS,A0 ;set-up our globals
-
- MOVE.W 0(A0),D0 ;TOP VALUE
- ADDI #20,D0
- MOVE.W D0,(A0)
-
- MOVE.W 2(A0),D0 ;LEFT VALUE
- ADDI #20,D0
- MOVE.W D0,2(A0)
-
- MOVE.W 4(A0),D0 ;BOTTOM VALUE
- ADDI #20,D0
- MOVE.W D0,4(A0)
-
- MOVE.W 6(A0),D0 ;RIGHT VALUE
- ADDI #20,D0
- MOVE.W D0,6(A0)
-
- ;-- SET UP MODELESS DIALOG WINDOW ON HEAP ----
-
- CLR.L -(SP) ;return window ptr
- CLR.L -(SP) ;window record ptr. (HEAP)
- PEA DBOUNDS ;window rectangle size
- PEA DWINDTITLE ; window title
- MOVE.W #$100,-(SP) ; true = visible
- MOVE.W #16,-(SP) ; round doc type window
- MOVE.L #-1,-(SP) ; window in front
- MOVE.W #$100,-(SP) ; true=closebox
- MOVE.L #0, -(SP) ; reference value
- MOVE.L DIALOGITEMS,-(SP) ; items list handle
- _NewDialog ; make new window
-
- LEA ABOUTHANDLE,A0 ;DIALOG WINDOW HANDLE
- MOVE.L (SP),(A0) ; SAVE HANDLE
- _SetPort ;make dialog active
-
- MOVE.L TEXTRHANDLE,-(SP) ;deactivate text edit
- _TEDeactivate
- JMP GetEvent
-
- Infilemenu:
-
- CMP #1, D6 ;Open?
- BEQ Open
- CMP #2, D6 ;Close?
- BEQ Close
- CMP #3,D6 ;quit?
- BNE GetEvent ;no, try again
- BRA Exit ;yes, exit
-
- Open:
-
- ; window is hiding...open it again
-
- MOVE.L WPOINTER, -(SP) ;our window ptr
- _ShowWindow
- MOVE.L FILEMENU,-(SP) ;menu handle
- MOVE.W #2,-(SP) ;open item
- _EnableItem ;enable open for file menu
- MOVE.L FILEMENU,-(SP) ;push menu handle
- MOVE.W #1,-(SP) ;open
- _DisableItem ;disable it
- JMP GetEvent
-
- Close:
-
- ; perform go away function
-
- MOVE.L WPOINTER, -(SP) ;our window ptr
- _HideWindow ;hide window
- MOVE.L FILEMENU,-(SP) ;menu handle
- MOVE.W #1,-(SP) ;open item
- _EnableItem ;enable open for file menu
- MOVE.L FILEMENU,-(SP) ;push menu handle
- MOVE.W #2,-(SP) ;close
- _DisableItem ;disable it
- JMP GetEvent
-
-
- Ineditmenu:
-
- ; check if system edit in desk acc.
-
- CLR -(SP) ;result
- MOVE.W D6,-(SP) ;push menu item
- SUBQ #1, (SP) ;system edit offset
- _SysEdit ;do editing
- MOVE.B (SP)+,D0 ;pop result
- BNE GetEvent ;system edit did it
- ;desk acc. not active
-
- CLR.L -(SP)
- _FrontWindow ;whoose up?
- MOVE.L (SP)+,A0
- CMP.L ABOUTHANDLE,A0 ;is this an about window?
- BEQ GetEvent ;yes, ignore it
-
- CMP #3,D6 ;our cut?
- BEQ CUT
- CMP #4,D6 ;our copy?
- BEQ COPY
- CMP #5,D6 ;our paste?
- BEQ PASTE
- CMP #6,D6 ;our clear?
- BEQ CLEAR
-
- JMP GetEvent ;nothing left
-
- ; ------- text editing only for desk acc. ------
-
- CUT:
- MOVE.L TEXTRHANDLE,-(SP) ;text handle
- _TECut
- JMP GetEvent
-
- COPY:
- MOVE.L TEXTRHANDLE,-(SP) ;text handle
- _TECopy
- JMP GetEvent
-
- PASTE:
- MOVE.L TEXTRHANDLE,-(SP) ;text handle
- _TEPaste
- JMP GetEvent
-
- CLEAR:
- MOVE.L TEXTRHANDLE,-(SP) ;text handle
- _TEDelete
- JMP GetEvent
-
-
- Exit:
-
- JMP Tofinder ;return to finder
-
- ; ---------- END OF MAIN --------------
-
- ; ---------- INITVAR SUBROUTINE ----------
- INITVAR:
-
- LEA DBOUNDS,A0 ;set-up dialog window
- ;box frame size.
- MOVE.W #70, (A0) ;TOP
- MOVE.W #70, 2(A0) ;LEFT
- MOVE.W #220, 4(A0) ;BOTTOM
- MOVE.W #370, 6(A0) ;RIGHT
-
- LEA Savetop,A1
- MOVE.W (A0), (A1) ;GET TOP
- RTS
- ; ---------- QDSTUFF SUBROUTINE ----------
- QDSTUFF:
-
- ; This subroutine is a static
- ; window display of text for our
- ; ad. It would more properly be
- ; placed in a resource file as
- ; strings, but when in a hurry...
-
- _PenNormal
-
- LEA top,A0 ;set-up appl. window
- ;box frame size.
- MOVE.W #10, (A0) ;TOP
- MOVE.W #30, 2(A0) ;LEFT
- MOVE.W #250, 4(A0) ;BOTTOM
- MOVE.W #400, 6(A0) ;RIGHT
-
- PEA top ;frame rectangle
- _FrameRect ;draw rectangle
-
- MOVE.W #1, -(SP) ;FONT
- _TextFont
- MOVE.W #12, -(SP) ;style
- _TextFace
- MOVE.W #24, -(SP) ;SIZE
- _TextSize
- MOVE.W #40, -(SP) ; h
- MOVE.W #50, -(SP) ;v
- _MoveTo ;set pen location
- PEA 'MacTutor'
- _DrawString
-
- MOVE.W #0, -(SP) ;chicago
- _TextFont
- MOVE.W #0, -(SP) ;normal
- _TextFace
- MOVE.W #12, -(SP) ;12 point size
- _TextSize
- MOVE.W #40, -(SP) ;H
- MOVE.W #80, -(SP) ;V
- _MoveTo
- PEA 'The Macintosh Programming Journal'
- _DrawString
-
- MOVE.W #40, -(SP) ;H
- MOVE.W #110, -(SP) ;V
- _MoveTo
- PEA 'AT LAST! A no-nonsense, no fluff Journal'
- _DrawString
-
- MOVE.W #40, -(SP) ;H
- MOVE.W #130, -(SP) ;V
- _MoveTo
- PEA 'devoted to programming ON the Mac, FOR the Mac!'
- _DrawString
-
- MOVE.W #40, -(SP) ;H
- MOVE.W #150, -(SP) ;V
- _MoveTo
- PEA 'Subscribe to MacTutor, and learn how to create'
- _DrawString
-
- MOVE.W #40, -(SP) ;H
- MOVE.W #170, -(SP) ;V
- _MoveTo
- PEA 'this assembly language program, including the icon!'
- _DrawString
-
- MOVE.W #40, -(SP) ;H
- MOVE.W #190, -(SP) ;V
- _MoveTo
- PEA 'So do not delay. Send for the ONLY Technical '
- _DrawString
-
- MOVE.W #40, -(SP) ;H
- MOVE.W #210, -(SP) ;V
- _MoveTo
- PEA 'publication that teaches the Mac technology!'
- _DrawString
-
- MOVE.W #80, -(SP) ;H
- MOVE.W #230, -(SP) ;V
- _MoveTo
- PEA 'Send $24 for 12 issues to:'
- _DrawString
-
- LEA top,A0
- MOVE.W #215, (A0) ;TOP
- MOVE.W #250, 2(A0) ;LEFT
- MOVE.W #290, 4(A0) ;BOTTOM
- MOVE.W #450, 6(A0) ;RIGHT
- PEA top ;frame rectangle
- _EraseRect ;clear rectangle
- PEA top
- _FrameRect ;draw rectangle
-
- MOVE.W #2, -(SP) ;WIDTH
- MOVE.W #2, -(SP) ;HEIGHT
- _PenSize
-
- LEA top,A0
- MOVE.W #218, (A0) ;TOP
- MOVE.W #253, 2(A0) ;LEFT
- MOVE.W #287, 4(A0) ;BOTTOM
- MOVE.W #447, 6(A0) ;RIGHT
- PEA top ;frame rectangle
- _FrameRect ;draw rectangle
-
- MOVE.W #280, -(SP) ;H
- MOVE.W #230, -(SP) ;V
- _MoveTo
- PEA 'MacTutor'
- _DrawString
-
-
- MOVE.W #280, -(SP) ;H
- MOVE.W #245, -(SP) ;V
- _MoveTo
- PEA 'P.O. Box 846'
- _DrawString
-
-
- MOVE.W #280, -(SP) ;H
- MOVE.W #260, -(SP) ;V
- _MoveTo
- PEA 'Placentia, CA 92670'
- _DrawString
-
-
- MOVE.W #280, -(SP) ;H
- MOVE.W #275, -(SP) ;V
- _MoveTo
- PEA 'Or call (714) 993-9939'
- _DrawString
-
- RTS
-
- ; --- RESTORE THE WORLD --------
-
- Tofinder: LEA SAVEREGS,A0 ; get 'em back
- MOVE.L (A0),A6 ; local var
- MOVE.L 4(A0),A7 ;restore stack
- MOVEM.L (SP)+,D0-D7/A0-A6
-
- ; ---- RETURN TO FINDER --------
-
- RTS ; return to finder
-
- ; ----LOCAL DATA AREA -----------
-
- APPLEMENU: DC.L 0 ;apple menu handle
- FILEMENU: DC.L 0 ;file menu handle
- EDITMENU: DC.L 0 ;edit menu handle
- DeskName DCB.W 16,0 ;Desk accesory's name
- SAVEREGS: DCB.L 2,0 ;set save area
-
- ; ------- our window definitions ------
-
- WPOINTER: DC.L 0 ;store window pt
-
- WBOUNDS: DC.W 40 ;TOP - window size rectangle
- DC.W 2 ;LEFT
- DC.W 335 ;BOTTOM
- DC.W 508 ;RIGHT
-
- ViewRect: DC.W 50 ;text edit view rectangle
- DC.W 4
- DC.W 245
- DC.W 405
-
- DestRect: DC.W 50 ;text edit destination rectangle
- DC.W 4
- DC.W 245
- DC.W 405
-
- WINDTITLE: DC.B 43 ; title length
- DC.B 'MacTutor: The Macintosh Programming Journal',0
-
- DRAGWINDOW: DC.W 30 ;rectangle
- DC.W 1 ;for dragging
- DC.W 350
- DC.W 510
-
- ; ------- our dialog window definitions ------
-
- ABOUTHANDLE: DC.L 0 ;handle holder for window
-
- DWINDTITLE: DC.B 26 ; title length
- DC.B 'ALL ABOUT THE MacTutor Ad ',0
-
- ITEMHIT: DC.W 0 ;ITEM HIT HOLDER
-
- DIALOGITEMS: DC.L 0 ;handle holder for resource DITL
- ; ------------------------------------
-
- EventRecord:
-
- What: DC.W 0 ;what event number
- Message: DC.L 0 ;ptr. to msg
- When: DC.L 0 ;Time event was posted
- Point: DC.L 0 ;mouse coordinates
- Modify: DC.W 0 ;state of keys & button
-
- WWindow: DC.L 0 ;Find window's result
-
-
-
- ; -------------- APPLICATION GLOBALS -----------
-
- top: DS.W 1 ;frame size storage
- left: DS.W 1 ;for QDSTUFF rectangle
- bottom: DS.W 1
- right: DS.W 1
-
- DBOUNDS: DS.W 1 ;TOP - window size rectangle
- DS.W 1 ;LEFT
- DS.W 1 ;BOTTOM
- DS.W 1 ;RIGHT
-
- Savetop: DS.W 1 ;save top value
- ; ------------ END OF PROGRAM ----------------
-
-